package com.leo.utils;

import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.util.DisplayMetrics;

import java.util.List;

/**
 * Created by zhangguobao on 2015/11/2.
 * fuction :  获取app活动信息
 */
public class ApplicationUtils {
    public static int getAppVersion(Context context) {
        try {
            PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
            return info.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return 1;
    }

    /**
     * 获取屏幕宽度
     * @param context
     * @return
     */
    public static int getDisplayWidth(Context context) {
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        return dm.widthPixels;
    }

    /**
     * 获取屏幕高度
     * @param context
     * @return
     */
    public static int getDisplayHeight(Context context) {
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        return dm.heightPixels;
    }

    /**
     *
     * function: 读取manifest中相应meta-data标签的值
     *
     * @param context
     * @param keyName meta-data标签的名称
     * @return 		  meta-data标签的值
     *
     * @ author:leo 2014年7月15日 下午5:53:07
     */
    public static Object getManifestMetaData(Context context, String keyName) {
        Object value = null;
        try {
            ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(),
                    PackageManager.GET_META_DATA);
            Bundle bundle = appInfo.metaData;
            value = bundle.get(keyName);
            return value;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
        return value;
    }

    /**
     *
     * function:  判断指定的服务是否已启动
     *
     * @param context
     * @param serviceFullName 服务全名(包括包名)
     * @return
     *
     * @ author:leo 2014年7月15日 下午6:04:32
     */
    public static boolean isServiceRunning(Context context, String serviceFullName) {
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningServiceInfo> runningServices = manager.getRunningServices(40);
        if (CheckUtils.isNotEmpty(runningServices)) {
            for (ActivityManager.RunningServiceInfo runningService : runningServices) {
                if (runningService.service.getClassName().equals(serviceFullName)) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     *
     * function: 判断某个intent是否可用
     * <p> e.g. 判断系统是否可以处理mailto数据：
     * <p>intent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:www.baidu.com"));
     *
     * @param context
     * @param intent
     * @return
     *
     * @ author:leo 2014年7月15日 下午6:05:40
     */
    public static boolean isIntentAvailable(Context context, Intent intent) {
        final PackageManager packageManager = context.getPackageManager();
        List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
    }

    /**
     *
     * function: 判断是否安装过应用
     *
     * @param context
     * @param packageName 包名
     * @return
     *
     * @ author:leo 2014年7月15日 下午6:06:52
     */
    public static boolean isAppInstalled(Context context, String packageName) {
        if (CheckUtils.isEmpty(packageName)) {
            return false;
        }
        PackageInfo packageInfo = null;
        try {
            packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return packageInfo != null;
    }

    /**
     *
     * function: 打开指定包名的应用
     *
     * @param context 上下文
     * @param packageName 包名
     * @return 启动成功与否
     *
     * @ author:leo 2014年7月16日 上午9:13:57
     */
    public static boolean launchApp(Context context, String packageName) {
        if (CheckUtils.isNull(context) || CheckUtils.isEmpty(packageName)) {
            return false;
        }
        // 获取指定包名的启动Intent
        PackageManager pm = context.getPackageManager();
        Intent intent = pm.getLaunchIntentForPackage(packageName);
        // 判断是否安装
        if (CheckUtils.isNull(intent)) {
            return false;
        } else {
            context.startActivity(intent);
            return true;
        }
    }




}
